Modern enterprises critically depend on a large number of business applications that need to interact with each other. These applications typically have a long life during which they need to cope with changes in business requirements and advances in the technology platforms. These applications typically do not use complex algorithms and data structures but are large in size - typically millions of lines of code – and essentially data-centric in nature having to support multiple views in a consistent manner. We present a model driven development approach wherein applications are specified using different kinds of models and a higher level language that are then translated by a set of code generators incorporating a choice of design strategies, technology platform and architecture into an implementation. This approach has been used to develop several large business-critical applications on a variety of technology platforms supporting various distributed architectures delivering increased productivity, better code quality and easier platform retargettability. However, supporting such variations in design strategies, technology platform and architecture was effort intensive and time consuming. We describe an aspect-oriented approach to restructure our model based code generators that addresses this problem. We also present a meta-data driven aspect oriented software development approach as a lighter weight variant of the model driven development approach. We also touch upon how model based techniques can be used to support application integration, component factories etc. The talk will include demos where appropriate.